#ifndef __MY_HOT__
#define __MY_HOT__
#include <unistd.h>
#include "data.hpp"

extern cloud::DataManager* _data;
namespace cloud
{
    class HotManager
    {
    public:
        HotManager()
        {
            Config* config = Config::GetInstance();
            FileUtil fu1(config->GetBackDir());
            FileUtil fu2(config->GetPackDir());
            fu1.CreateDirectory();
            fu2.CreateDirectory();
        }
        bool RunModule()
        {
            Config* config = Config::GetInstance();
            while(1)
            {
                // 1.遍历备份目录，获取所有文件名
                FileUtil fu(config->GetBackDir());
                std::vector<std::string> array;
                fu.ScanDirectory(&array);
                // 2.遍历判断文件是否是非热点文件
                for(auto &a : array)
                {
                    if(HotJudge(a) == false) 
                        continue; 
                    // 3.获取文件备份信息
                    BackupInfo info;
                    if(_data->GetOneByRealpath(a, &info) == false)
                    {
                        // 现在存在一个文件，但是没有备份信息
                        info.NewBackupInfo(a);
                    }
                    // 4.对非热点文件进行压缩处理  
                    FileUtil tmp(a);
                    tmp.Compress(info.pack_path);
                    // 5.删除源文件，修改备份信息
                    tmp.Remove();
                    info.pack_flag = true;
                    _data->Updata(info);
                }
                usleep(1000);
            }
            return true;
        }
    private:
        bool HotJudge(const std::string &filename)
        {
            Config* config = Config::GetInstance();
            FileUtil fu(filename);
            time_t last_atime = fu.LastATime();
            time_t cur_time = time(NULL);
            if(cur_time - last_atime > config->GetHotTime())
            {
                return true;
            }
            return false;
        }
    };
}
#endif
